#ifndef __IRC_INTERNAL_H__
#define __IRC_INTERNAL_H__

#ifdef __cplusplus
extern "C" {
#endif
/***********************************************************************
***********************************************************************/
  typedef enum{
	IRC_ST_DISCONNECT,
	IRC_ST_WAIT_RESPONSE,	// コネクトコマンドを発行してレスポンスを待っている状態(仮センダー)
	IRC_ST_WAIT_ACK,		// レスポンスを発行してACKを待っている状態(仮レシーバー)
	IRC_ST_SENDER,
	IRC_ST_RECEIVER,
	IRC_ST_NUM
  }IRC_STATUS;
/***********************************************************************
***********************************************************************/
typedef struct{
  u8	command;	// コマンド
  u8	value;		// ユーザフリー
  u8	sumL;		// チェックサム上位
  u8	sumH;		// チェックサム下位
  u32	uniqueId;
}Header;
/***********************************************************************
***********************************************************************/
  typedef struct{
	IRC_STATUS status;
	BOOL flg_connect;
  }IRCStatus;
/***********************************************************************
通信コマンドリスト(システムコマンドのみ)
***********************************************************************/
  typedef enum{
  /*****************************************************************
      システムコマンド
  *****************************************************************/
  IR_RESET		= (0xF2),
	IR_SHUTDOWN	= (0xF4),
	IR_RETRY		= (0xF6),
	
	IR_ACK		= (0xF8),	// ACK
	IR_RESPONSE	= (0xFA),	// レスポンス
	IR_CONNECT	= (0xFC),	// コネクト
	IR_NUM
	}IRCommand;
/***********************************************************************
NitroSDK 内で定義してある関数のextern 宣言
***********************************************************************/
// 2024.10.14
#if 0
  extern void dhc_init(void); // NitroSDK 内に実装
  extern void dhc_end(void);

  extern u8 dhc_read(u8 *buf); // ユーザは呼ばなくてよいはず
  
  extern void irci_write(u8 *data, u8 size);
  extern void dhc_setreadwait(u8 time); // ユーザは呼ばなくてよいはず
  extern void dhc_setwritewait(u8 time); // ユーザは呼ばなくてよいはず
#else
  extern void dhc_init(void); // NitroSDK 内に実装
  extern u8 dhc_read(u8 *buf); // ユーザは呼ばなくてよいはず
  extern void dhci_write(u8 *buf, u8 size, u8 command, u8 value, u32 id); // リトライ用のデータ保存をしない ユーザは呼ばなくてよいはず
  extern void dhc_write(u8 *buf, u8 size, u8 command, u8 value, u32 id);
  extern void dhc_savedata(void); // ユーザは呼ばなくてよいはず
  extern u8* dhc_getretrydata(void); // ユーザは呼ばなくてよいはず
  extern void dhc_retry(void); // ユーザは呼ばなくてよいはず
  extern void dhc_setreadwait(u8 time); // ユーザは呼ばなくてよいはず
  extern void dhc_setwritewait(u8 time); // ユーザは呼ばなくてよいはず
  extern void dhci_command(u8 command); // 1バイト送信関数
#endif
  
/***********************************************************************
***********************************************************************/
#ifdef __cplusplus
} /* extern "C" */
#endif

#endif
